/**
 * 此示例展示了和方法的简单用例。这两种方法都可以用来简化数据集结果工作流程。两者都可以直接在数据集上调用。Dataset mapreduce
 * 值得一提的是，这两种方法都返回一个新结果（map返回一个新数组并且reduce可以返回任何类型）——这两种方法都不会以任何方式更新数据集。
 * 这两种方法的示例都在一个简单的数据集上进行了演示，该数据集包含从页面中抓取的结果：键下的URL和假设数量的 h1- h3header 元素headingCount。
 * 该数据结构存储在 下的默认数据集中{PROJECT_FOLDER}/storage/datasets/default/。如果您想模拟该功能，可以使用该dataset.pushData() 方法将示例保存JSON array到数据集。
 */
import { Dataset, KeyValueStore } from 'crawlee';

const dataset = await Dataset.open<{
    url: string;
    headingCount: number;
}>();

// 用一些数据播种数据集
await dataset.pushData([
    {
        url: 'https://crawlee.dev/',
        headingCount: 11,
    },
    {
        url: 'https://crawlee.dev/storage',
        headingCount: 8,
    },
    {
        url: 'https://crawlee.dev/proxy',
        headingCount: 4,
    },
]);

// 调用地图函数并通过映射项目进行过滤...
const moreThan5headers = (await dataset.map((item) => item.headingCount)).filter((count) => count > 5);

// 将映射结果保存到默认键值存储...
await KeyValueStore.setValue('pages_with_more_than_5_headers', moreThan5headers);
